LoongServe具体的调度逻辑
生成需要调度的req list
longserve_server/router/req_queue.py
Class ReqQueue
generate_new_req_list
整体逻辑
- 如果waiting queue为空或者running queue已经大于等于系统可支持的最大服务req数量,return[]
获取一些系统调度的参数
根据系统参数返回waiting queue的一个子集new req list
系统参数:
estimated_max_iterations = 10
:
- 初始设定的最大迭代次数为 10。
avg_num_iterations
:
- 通过历史数据计算完成请求的平均解码长度(迭代次数)。
inverted_preempted_decode_token_sum = 0
:
- 累计因抢占式解码带来的 "反向影响"(即每个请求输出 token 的倒数和),用于衡量抢占对资源的利用效率。
cur_all_used_tokens_list
:
- 之前pause的req暂存在各个卡上的token(序列并行)
- current batch list中各Req存在各个卡上的token(序列并行)
estimated_waiting_time
:
- 该batch所预估出来的最大推理轮数*平均decode时间
num_idle_slots
- 所有卡中剩余的总token slots空间
.......
弹性调度
longserve_server/router/manager.py
Class RouterManager
_schedule_new_req_list_with_decoding
整体逻辑:
- 获取